package com.keqing.algorithm.leetcode.simple.reverse;

/**
 * 7.整数反转
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 * 示例 1：
 * 输入：x = 123
 * 输出：321
 * 示例 2：
 * 输入：x = -123
 * 输出：-321
 * 示例 3：
 * 输入：x = 120
 * 输出：21
 * 示例 4：
 * 输入：x = 0
 * 输出：0
 * 提示：
 * -2^31 <= x <= 2^31 - 1
 */
public class Reverse {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int x = 214748364;//2147483647
        int reverseValue = solution.reverse(x);
        System.out.println(reverseValue);
    }

}

class Solution {
    public int reverse(int x) {
        int reverse = 0;
        while (x != 0) {
            int digit = x % 10;//个位数字
            x = x / 10;//去掉个位后的数字
            //判断反转前数字有没有溢出边界的风险
            if (reverse > Integer.MAX_VALUE / 10 || reverse < Integer.MIN_VALUE / 10) {
                return 0;
            }
            reverse = reverse * 10 + digit;
        }
        return reverse;
    }
}